#include "openAlsFileDialog.h"

#include <wx/sizer.h>
#include <wx/string.h>
#include <wx/stattext.h>
#include "glFrame.h"

OpenAlsFileDialog::OpenAlsFileDialog(eLutColorSpace syst,int type,
                 std::vector<LutBound*> vect, wxWindow *parent,
                 const wxString& title, const wxPoint& pos, const wxSize& size)
    : wxDialog(parent, ID_DIALOG_VISU, title, pos, size, wxDEFAULT_DIALOG_STYLE)
{
    systemeCouleur_dialogue = syst;
    typeinterp_dialogue = type;
    intervalle_lutdiag = vect;
    wxBoxSizer *globalSizerDialogVisu = new wxBoxSizer( wxVERTICAL );
    SetSizer( globalSizerDialogVisu );
    wxBoxSizer *horz1Visu = new wxBoxSizer( wxHORIZONTAL );
    globalSizerDialogVisu->Add(horz1Visu,
                                0,
                                wxALIGN_LEFT |wxADJUST_MINSIZE |wxLEFT|wxTOP ,
                                10);
    wxStaticText *choixFichier = new wxStaticText(this,
                                            wxID_ANY,
                                            _T("Fichier ASCII a importer :"),
                                             wxDefaultPosition,
                                            wxSize(250,25),
                                            0,
                                           _T("fichier"));
    horz1Visu->Add(choixFichier,
                    0,
                    wxALIGN_LEFT |wxLEFT,
                    10 );
    wxBoxSizer *horz2Visu = new wxBoxSizer( wxHORIZONTAL );
    globalSizerDialogVisu->Add(horz2Visu,
                                0,
                                wxALIGN_LEFT |wxADJUST_MINSIZE|wxTOP,
                                10);
    fichierAsciiImport = new wxTextCtrl(this,
                                        ID_FICHIER_ASCII,
                                        _T(""),
                                        wxDefaultPosition,
                                        wxSize(370,25),
                                        wxTE_READONLY,
                                        wxDefaultValidator,
                                        _T("borneMinValeur"));
    horz2Visu->Add(fichierAsciiImport,
                    0,
                    wxALIGN_LEFT |wxLEFT,
                    10 );
    parcourir = new wxButton(this,
                                ID_PARCOURIR,
                                _T(" ... "),
                                wxDefaultPosition,
                                wxSize(60,25),
                                0,
                                wxDefaultValidator,
                                _T("parcourir"));
    parcourir->SetToolTip( _T("Parcourir...") );
    horz2Visu->Add(parcourir,
                    0,
                    wxALIGN_LEFT |wxLEFT,
                    10 );
    wxBoxSizer *horz3Visu = new wxBoxSizer( wxHORIZONTAL );
    globalSizerDialogVisu->Add(horz3Visu,
                                0,
                                wxALIGN_LEFT |wxADJUST_MINSIZE |wxLEFT|wxTOP ,
                                10);
    wxStaticText *choixAffect = new wxStaticText(
                            this,
                            wxID_ANY,
                            _T("Choisir le paramètre auquel affecter le LUT :"),
                            wxDefaultPosition,
                            wxSize(350,25),
                            0,
                           _T("fichier"));
    horz3Visu->Add(choixAffect,
                    0,
                    wxALIGN_LEFT |wxLEFT,
                    10 );
    wxString tab_choixAffectation[3]={_T("Z"),
                                        _T("Intensite"),
                                        _T("Classe")};
    choixAffectationLut = new wxComboBox( this,
                                            ID_AFFECTATION,
                                            _T(""),
                                            wxDefaultPosition,
                                            wxSize(100, 25),
                                            3,
                                            tab_choixAffectation,
                                            wxCB_DROPDOWN,
                                            wxDefaultValidator,
                                            _T("choixAffectation"));
    horz3Visu->Add(choixAffectationLut,
                    0,
                    wxALIGN_LEFT |wxLEFT,
                    10 );
    wxBoxSizer *horz4Visu = new wxBoxSizer( wxHORIZONTAL );
    globalSizerDialogVisu->Add(horz4Visu,
                         0,
                      wxALIGN_RIGHT |wxADJUST_MINSIZE |wxRIGHT|wxBOTTOM|wxTOP ,
                      10);
    ouvrirOGL = new wxButton(this,
                                ID_OUVRIROGL,
                                _T("OK"),
                                wxDefaultPosition,
                                wxSize(60,25),
                                0,
                                wxDefaultValidator,
                                _T("ouvrirOGL"));
    horz4Visu->Add(ouvrirOGL,
                    0,
                    wxALL,
                    0 );
    globalSizerDialogVisu->SetSizeHints(this);
}


/*---------------------------------------------------------------------------*/
/*                       Choix d'un fichier ASCII                            */
/*---------------------------------------------------------------------------*/
/* Description : en entrée :                                                 */
/*              en sortie : un clic sur le bouton "parcourir"                */
/*                              ouverture d'une boite de dialogue            */
/*                              parcourt del'arborescence de l'ordinateur    */
/*                              pour choisir un fichier ASCII                */
/*                          validattion du choix du fichier:                 */
/*                          affiche le nom du fichier dans la zone de texte  */
/*--------------------------------------------------------------------------*/
void OpenAlsFileDialog::ChoisirFichier(wxCommandEvent& event)
{
    wxFileDialog dialogAscii(this,
                                _T("Charger un fichier *.ASC"),
                                wxEmptyString,
                                wxEmptyString,
                                _T("ASCII files (*.ASC)|*.ASC"));
    dialogAscii.ShowModal();
    loadasciifilename = dialogAscii.GetPath();
    fichierAsciiImport->SetValue(dialogAscii.GetFilename());
}

/*---------------------------------------------------------------------------*/
/*    Choix d'un attribut	dans une combobox et enregistrement de la valeur */
/*---------------------------------------------------------------------------*/
void OpenAlsFileDialog::ChoixAttribut(wxCommandEvent& event)
{
    if(choixAffectationLut->GetSelection() == 0)
    {
        affectationLut = 0;
    }
    else if(choixAffectationLut->GetSelection() == 1)
    {
        affectationLut = 1;
    }
    else if(choixAffectationLut->GetSelection() == 2)
    {
        affectationLut = 2;
    }
}

/*---------------------------------------------------------------------------*/
/* Clic sur le bouton "OK",                                                  */
/* ouverture de la fenetre contenant le canevas OpenGl                       */
/*---------------------------------------------------------------------------*/
void OpenAlsFileDialog::OuvrirOGL(wxCommandEvent& event)
{
    glFrame *frameVisuOGL = new glFrame(loadasciifilename,
                                             affectationLut,
                                             systemeCouleur_dialogue,
                                             typeinterp_dialogue,
                                             intervalle_lutdiag,
                                             _T("Visualisation"),
                                             wxPoint(50,50),
                                             wxSize(800,800));
    frameVisuOGL->m_canvas;

    frameVisuOGL->Show(TRUE);
}

BEGIN_EVENT_TABLE(OpenAlsFileDialog, wxDialog)
    EVT_BUTTON(ID_PARCOURIR, OpenAlsFileDialog::ChoisirFichier)
    EVT_BUTTON(ID_OUVRIROGL, OpenAlsFileDialog::OuvrirOGL)
    EVT_COMBOBOX(ID_AFFECTATION, OpenAlsFileDialog::ChoixAttribut)
END_EVENT_TABLE()
